import axios from 'axios'
import store from '@/store'
import router from '@/router'

export let baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net'
const server = axios.create({
  baseURL,
  timeout: 10000,
})

server.interceptors.request.use(
  (config) => {
    let { token } = store.state.user.profile
    if (token) config.headers.Authorization = `Bearer ${token}`
    return config
  },
  (err) => Promise.reject(err),
)

server.interceptors.response.use(
  (res) => {
    return res.data
  },
  (err) => {
    console.log('err.response', err.response)
    // 登录超时
    if (err.response.status === 401) {
      // 清空用户信息
      store.commit('user/setUser', {})
      // 在进行操作的时候，没有登录的话就将当前路由传递给登录页
      // 拿到当前路由的所有信息  router.currentRoute.value.fullPath
      // 当路由信息中有多个参数的时候，取值的时候就需要分开取，然后需要进行转码
      let redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
      // 将地址存储到 vuex 中
      store.commit('user/setRedirectUrl', redirectUrl)
      router.push('/login?redirectUrl?=' + redirectUrl)
    }
    return Promise.reject(err)
  },
)

// 封装请求函数
export default (url, method = 'get', data) => {
  return server({
    url,
    method,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: data,
  })
}
